package com.audaque.springboot.foshanupload.web.mpgui;
import com.audaque.springboot.foshanupload.web.mpgui.enums.DataSourceEnum;
import com.audaque.springboot.foshanupload.web.mpgui.impl.MyNameConverter;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig;
import com.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication;
import com.github.davidfantasy.mybatisplus.generatorui.mbp.TemplateVaribleInjecter;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GeneratorMain {
    //前缀



    public static  DataSourceEnum dataSourceEnum= DataSourceEnum.RASP_CLOUD;


    /**
     *         //https://github.com/davidfantasy/mybatis-plus-generator-ui
     *         String property = System.getProperty("user.home");
     *         //user.home:C://Users//DEL
     *         System.out.printf("user.home:"+property);
     *         //所有的用户保存的配置是按照basePackage分组保存到user.home目录的.mybatis-plus-generator-ui中的，不同项目的配置不会互相影响。
     *         //C://Users//DELL//.mybatis-plus-generator-ui//com.audaque.springboot.foshanupload.web.mpguidemo.gen//user-config-behaviour.json
     *         //C://Users//DELL//.mybatis-plus-generator-ui//com.dp.behaviour.app//user-config-behaviour.json
     *
     *         //SQL结果集自动生成代码：通过输入查询SQL，可自动在Mapper（Xml及Java）中生成对应的查询方法，DTO对象和ResultMap（结果集映射配置）
     *
     *         //动态SQL增强：自动识别含有mybatis动态参数的where条件，转换为mybatis的动态SQL条件
     * @param args
     */

    public static void main(String[] args) {



        GeneratorConfig config = GeneratorConfig.builder()
                //.jdbcUrl("jdbc:mysql://localhost:3306/dev_foshanupload_web?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useAffectedRows=true")
                .jdbcUrl(dataSourceEnum.getJdbcUrl())
                .userName(dataSourceEnum.getUserName()).password(dataSourceEnum.getPassword()).driverClassName(dataSourceEnum.getDriverClassName())
                // 数据库schema，POSTGRE_SQL,ORACLE,DB2类型的数据库需要指定
                // .schemaName("myBusiness")
                //自定义名称转换器
                .nameConverter(new MyNameConverter())
                /**
                 * MyBatis-Plus默认实现5种主键生成策略，分别是：
                 *
                 * AUTO，配合数据库设置自增主键，可以实现主键的自动增长，类型为nmber；
                 * INPUT，由用户输入；
                 * NONE，不设置，等同于INPUT；
                 * ASSIGN_ID，只有当用户未输入时，采用雪花算法生成一个适用于分布式环境的全局唯一主键，类型可以是String和number；
                 * ASSIGN_UUID，只有当用户未输入时，生成一个String类型的主键，但不保证全局唯一；
                 */
                .idType(dataSourceEnum.getIdType())

                //生成的包路径
                //.basePackage("com.audaque.springboot.foshanupload.web.mpguidemo.gen")
                .basePackage(dataSourceEnum.getBasePackage())
                //http://localhost:8083/table
                .port(dataSourceEnum.getPort())


                //自定义模板参数:全局配置，写死，不会因请求参数而改变
                .templateVaribleInjecter(new TemplateVaribleInjecter(){
                    @Override
                    public Map<String, Object> getCustomTemplateVaribles(TableInfo tableInfo){
                        Map<String, Object> params=new HashMap<>();
                        //添加自定义參數
                        //自定义path
                        params.put("controllerMappingHyphenStyle", false);
                        //v3
                        params.put("springdoc", true);
                        //v2
                        params.put("swagger", false);
                        //entity是否添加swagger
                        params.put("entityLombokModel", true);
                        params.put("restControllerStyle", true);
                        //生成的包路径
                        params.put("packagePath", dataSourceEnum.getBasePackage());
                        return params;
                    }
                })
                .build();
                //启动内部应用
        MybatisPlusToolsApplication.run(config);

    }

}
